namespace C4F.DevKit.Bluetooth.ObjectPushProfile
{
    #region Using Directives
    using System;
    #endregion

    /// <summary>
    /// Class representing an asynchronous Object Push Profile Request.
    /// </summary>
    internal class OPPRequest
    {
        #region Private Fields

        /// <summary>
        /// The user-supplied state object supplied when the asynchronous 
        /// operation was requested.
        /// </summary>
        private object userState;

        /// <summary>
        /// Type of the asynchronous ObjectPushProfile operation.
        /// </summary>
        private OPPRequestType requestType;

        /// <summary>
        /// The input parameters required for the asynchronous operation.
        /// </summary>
        private object[] requestParameters;

        #endregion

        #region Public Properties

        /// <summary>
        /// Gets the type of the asynchronous ObjectPushProfile operation.
        /// </summary>
        public OPPRequestType RequestType
        {
            get { return this.requestType; }
        }

        /// <summary>
        /// Gets the user-supplied state object supplied when the asynchronous
        /// operation was requested.
        /// </summary>
        public object UserState
        {
            get { return this.userState; }
        }

        /// <summary>
        /// Gets the input parameters required for the asynchronous operation.
        /// </summary>
        public object[] RequestParameters
        {
            get { return this.requestParameters; }
        }

        #endregion

        #region Constructors

        /// <summary>
        /// Initializes the OPPRequest object.
        /// </summary>
        /// <param name="requestType">The type of asynchronous operation.
        /// </param>
        /// <param name="userState">The user-supplied state object supplied 
        /// when the asynchronous 
        /// operation was requested.</param>
        /// <param name="requestParameters">The input parameters required for
        /// the asynchronous operation.</param>
        public OPPRequest(OPPRequestType requestType, object userState,
            params object[] requestParameters)
        {
            this.requestType = requestType;
            this.userState = userState;
            this.requestParameters = requestParameters;
        }

        #endregion
    }
}